home *** CD-ROM | disk | FTP | other *** search
/ The Best of MacTutor - S…e Code for Volumes 1 to 5 / The Best of MacTutor - Source Code for Volume 1-5 (Wayzata Technology)(6031)(1990).bin / Source Code / #38 (Nov 88) / IAC / New Driver Stuff / SAWSINIT.a < prev    next >
Text File  |  1988-08-21  |  3KB  |  109 lines

  1. ;******************************************************************************
  2. ;*****       The SAWS Inter-Application Communication Driver Loader       *****
  3. ;*****        Written with blazing speed 6-7/88 by Paul F. Snively        *****
  4. ;*****          With one HELL of a lotta help from Frank Alviani          *****
  5. ;******************************************************************************
  6. ;
  7. ;Modification History:
  8. ;6/19/88 First Draft--Paul F. Snively
  9. ;7/10/88 Hopefully last draft--this SHOULD work--Paul F. Snively
  10. ;8/21/88 Now searches for open slot from end of table--Frank Alviani
  11. ;    (Algorithm from Pete Helme, Apple MACDTS)
  12. ;
  13. ;Basically what this puppy does is to assume that there's a DRVR resource lying
  14. ;around that happens to be named ".IAC" and, if there is, it loads it into the
  15. ;System Heap and opens it.  Simple, huh?
  16. ;
  17.  
  18.         INCLUDE    'Traps.a'
  19.         INCLUDE    'QuickEqu.a'
  20.         INCLUDE    'SysEqu.a'
  21.         INCLUDE    'ToolEqu.a'
  22. ;        STRING    ASIS
  23.  
  24. successID    EQU    128
  25. failureID    EQU    129
  26.  
  27. SAWSINIT:    PROC
  28.  
  29.     IMPORT    ShowINIT
  30.  
  31. Frame    RECORD    4,DECR
  32. return    DS.L    1
  33. A6Link    DS.L    1
  34. theID    DS.W    1
  35. theType    DS.L    1
  36. name    DS.B    256
  37. fSize    EQU    *
  38.     ENDR
  39.  
  40.     LINK    A6,#Frame.fSize            ;space for locals...
  41. ; Find an open slot in the driver table and load into that
  42.     MOVE.W    UnitNtryCnt,D2            ;How many slots?
  43.     SUBQ.W    #1,D2                ;Adjust
  44.     MOVE.W    D2,D1                ;Set up offset
  45.     LSL.W    #2,D1
  46.     MOVEA.L    UTableBase,A0            ;Where's the table?
  47. SrchLoop
  48.     TST.L    0(A0,D1.W)            ;Available?
  49.     BEQ.S    GotSlot                ;Yup...
  50.     SUBQ.L    #4,D1                ;Drop Offset
  51.     SUBQ.W    #1,D2                ;Drop slot ID
  52.     CMPI.L    #39,D2                ;At bottom limit?
  53.     BGT.S    SrchLoop
  54.     BRA.S    BadNews                ;No open slots in the inn
  55. ;Get resource by name
  56. GotSlot
  57.     SUBQ.W    #4,A7                ;Space for handle
  58.     MOVE.L    #$44525652,-(A7)        ;'DRVR'
  59.     PEA    DriverName
  60.     _GetNamedResource
  61.     MOVE.W    ResErr,D0            ;Get it?
  62.     BNE.S    BadNews
  63.     MOVE.L    (A7)+,D7            ;Was there enough memory?
  64.     BEQ.S    BadNews
  65. ;Change ID to open slot
  66.     MOVE.L    D7,-(A7)
  67.     PEA    Frame.theID(A6)            ;ID
  68.     PEA    Frame.theType(A6)        ;theType
  69.     PEA    Frame.name(A6)            ;name
  70.     _GetResInfo
  71.     MOVE.L    D7,-(A7)
  72.     MOVE.W    D2,-(A7)
  73.     PEA    Frame.name(A6)            ;name
  74.     _SetResInfo
  75. ;Open the driver!    
  76.     CLR.W    -(A7)                ;Room for refnum
  77.     PEA    DriverName            ;Point to driver name
  78.     _OpenDeskAcc                ;Open it
  79.     MOVE.W    (A7)+,D1            ;Pop refnum
  80. ;Ensure Driver undisturbed
  81.     MOVE.L    D7,-(A7)
  82.     _DetachResource
  83. ;Restore previous slot in file
  84.     MOVE.L    #$44525652,-(A7)        ;'DRVR'
  85.     PEA    DriverName
  86.     _GetNamedResource
  87.     MOVE.L    D7,-(A7)
  88.     MOVE.W    Frame.theID(A6),D0
  89.     MOVE.W    D0,-(A7)
  90.     MOVE.L    #0,-(A7)            ;leave alone name
  91.     _SetResInfo    
  92.     MOVE.W    #successID,-(SP)        ;Stack success ICN# ID
  93. ShowICON:
  94.     MOVE.W    #-1,-(SP)            ;Use standard pixel offset
  95.     MOVE.L    (SP)+,D0            ;TEMPORARY! POP OFF PARMS
  96. ;    JSR    ShowINIT            ;Tell user that driver installed
  97.     UNLK    A6
  98.     RTS                    ;And that's all, folks!
  99. BadNews:
  100.     MOVE.W    #failureID,-(SP)        ;Tell user we failed miserably
  101.     BRA.S    ShowICON            ;And leave
  102.  
  103. DriverName:
  104.     DC.B    '.IAC'                ;The name of our driver
  105.  
  106.     ENDPROC
  107.     
  108.     END
  109.